/**

 @Name：qbdms 公共业务
 @Author：wzt
 @Site：http://www.layui.com/admin/
 @License：LPPL

 */

layui.define(['table','form','layer','laydate','qbdmsForm'],function(exports){
    var $ = layui.$
        ,layer = layui.layer
        ,laytpl = layui.laytpl
        ,setter = layui.setter
        ,admin = layui.admin
        ,table = layui.table
        ,laydate=layui.laydate
        ,form = layui.qbdmsForm;
    var DEFAULTPROPS={
        STARTTIME:'input-start-time',
        ENDTIME:'input-end-time',
        FIELDNAME:'fieldname',
        TIMEINITNAME:'time-init',
    };
    var publicMethods = {
        //分页配置项
        pageFun:function () {
            return {
                prev:'上一页',
                next:'下一页',
                layout:['count', 'prev', 'page', 'next', 'limit', 'skip'],
                theme:'pageCss'
            }
        },
        //判断是否tab页    表格布局适应
        tabHeight:function(tableH,val,data){
            var isTab=localStorage.getItem('pageTabs') ;
            if (tableH){
                return  'full-'+tableH;
            }else {
                if(isTab){
                    //$(val).height($(document).height()-186);
                    // $(data).height($(document).height()-216);
                    return  'full-75';
                }else{
                    return  'full-75';
                }
            }

        },
        layerHeight:function(tableH){
            if (tableH){
                return  'full-'+tableH;
            }else {
                return  'full-100';}
        },
        //弹窗自适应高度
        layHeight:function(Mask){
            return $(Mask).height()-96 + 'px'
        },
        // 时间转化
        parTime:function(m) {
            return m < 10 ? '0' + m : m
        },
        timeData: function(date,type) {
            if (!date) {
                return "";
            }
            var time = new Date(date*1);
            var y = time.getFullYear();
            var m = time.getMonth() + 1;
            var d = time.getDate();
            var h = time.getHours();
            var mm = time.getMinutes();
            var s = time.getSeconds();
            if(type == '1'){
                return y + '-' + this.parTime(m) + '-' + this.parTime(d) + ' ' + this.parTime(h) + ':' + this.parTime(mm) + ':' + this.parTime(s);
            }else if(type == '2'){
                return this.parTime(h) + ':' + this.parTime(mm) + ':' + this.parTime(s);
            }else if(type == '3'){
                return y;
            }else if(type == '4'){
                return y + '-' + this.parTime(m);
            }else{
                return y + '-' + this.parTime(m) + '-' + this.parTime(d);
            }
        },

        /*刷新时间控件*/
        //istype   判断是什么类型  传值为datetime  不传为date
        reflashDate: function(props,isType) {
            var dataType="date";
            if(isType){
                dataType='datetime'
            }
            if(props.startName && props.endName){
                var nowTime = new Date().valueOf();
                var start = laydate.render({
                    elem: props.startName,
                    type: dataType,
                    trigger:'click',
                    max: new Date().valueOf(),
                    done: function (value, date, endDate) {
                        endMax = end.config.max;
                        end.config.min = date; //最大时间为结束时间的开始值  
                        end.config.min.month = date.month - 1;
                        $(props.startName).val(value);
                    }
                });
                var end = laydate.render({
                    elem: props.endName,
                    type: dataType,
                    trigger:'click',
                    max: 4073558400000,
                    format: 'yyyy-MM-dd',
                    done: function (value, date) {
                        if ($.trim(value) == '') {
                            var curDate = new Date();
                            date = {
                                'date': curDate.getDate(),
                                'month': curDate.getMonth() + 1,
                                'year': curDate.getFullYear()
                            };
                        }
                        start.config.max = date; //最小时间为开始时间的最大值  
                        start.config.max.month = date.month - 1;
                        $(props.endName).val(value);
                    }
                });
            }
        },
        //获取url值  单个值
        getQueryByName: function(name) {
            var url = window.location.href;
            var reg = new RegExp('[?&]' + name + '=([^&#]+)');
            var query = url.match(reg);
            return query ? query[1] : null;
        },
        // 表单内时间初始化
        formInfoTimeInit:function (props) {
            var list = $('[lay-filter*='+props+'] .'+DEFAULTPROPS.TIMEINITNAME+'');
            var arr = [];
            for(var i = 0; i<list.length;i++){
                laydate.render({
                    elem: '.'+$(list[i]).attr('name')
                });
                arr.push($(list[i]).attr('name'));
            }
            return arr
        },

        // ajax 共用
        commonAjax:function(props){
            if(props.data &&( props.url || props.path)){
                $.ajax({
                    url:props.path ? props.path : serverPath.qbdmsPath + setter.sysLinkPath + props.url,
                    type: props.method ? props.method : "POST",
                    contentType: 'application/json',
                    dataType: 'json',
                    data: props.data,
                    success: function(data) {
                        typeof props.callback == "function" ? props.callback(data) : null;
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        layer.alert("失败！" + XMLHttpRequest.status);
                    },
                });
            }
        },
        formEcho: function(props){
            if(props.name &&( props.url || props.path) && props.data){
                var _this = this;
                this.commonAjax({
                    url:  props.url || null,
                    path: props.path || null,
                    data: props.data,
                    method: props.method || null,
                    callback: function(data){
                        typeof props.ajaxCallback == "function" ? props.ajaxCallback(data) : null;
                        // 表单赋值
                        for(val in data.data){
                            if(data.data[val] == null){
                                data.data[val] = "";
                            }
                            if(_this._isInteger(data.data[val])){
                                data.data[val] = data.data[val].toString();
                            }
                            if (typeof data.data[val] == "string") {
                                data.data[val] = publicMethods.htmlDecodeByRegExp(data.data[val]);
                            }
                        }
                        if  ($("form[lay-filter="+props.name+"]").find("td")){
                            $("form[lay-filter="+props.name+"]").find("td").each(function (v,i) {
                                var thisName = $(this).attr("name")
                                if (thisName){
                                    $(this).text(data.data[thisName])
                                }
                            })
                        }

                        form.val(props.name, data.data);
                        publicMethods.bottomFixd()
                        $(".qbdms-particulars input").each(function (i,v) {
                            $(this).attr("placeholder","未填写")
                        })
                        $(".qbdms-particulars td").each(function (i,v) {
                            if($(this).text().replace(/\s/g, "")===""){
                                $(this).append("<span style='color:rgba(192, 196, 204, 1);'>未填写</span>")
                            }
                        })
                        $(".qbdms-particulars i.layui-edge").hide()
                        $(".qbdms-particulars i.layui-icon-date").hide()
                    }
                });
            }
        },
        htmlDecodeByRegExp:function(str){
            var s = "";
            if(str.length == 0) return "";
            s = str.replace(/&amp;/g,"&");
            s = s.replace(/&lt;/g,"<");
            s = s.replace(/&gt;/g,">");
            s = s.replace(/&nbsp;/g," ");
            s = s.replace(/'/g,"\'");
            s = s.replace(/"/g,"\"");
            s = s.replace(/&quot;/g,"\"");
            s = s.replace(/&apos;/g,"\'");
            return s;
        },
        /*{
            适用于数据提交  add  edit
            url  请求地址 必填
            name  事件名 必填
            ajaxCallback 回调方法
            formCallback form 回调
        }*/
        update: function(props){
            var _this = this;
            if(props.name && ( props.url || props.path)){
                form.on(props.name, function(data) {
                    // 提交前构建子表数据
                    var returnVal = typeof props.beforeSubmitFun == "function" ? props.beforeSubmitFun(data) : null;
                    if (returnVal == false) {
                        return;
                    }
                    typeof props.formCallback == "function" ? props.formCallback(data) : null;
                    _this.commonAjax({
                        url: props.url || null,
                        path: props.path || null,
                        data: JSON.stringify(data.field),
                        callback: function(datas){
                            typeof props.updateCallback == "function" ? props.updateCallback(datas) : _this._success(datas);
                        }
                    });
                });
            }
        },
        // 过滤返回值
        _filterRecord: function(data){
            // code 0 数据正常
            return data.code === 0 ? true : false ;
        },

        // 判断是否为整形
        _isInteger:function(obj) {
            return typeof obj === 'number' && obj%1 === 0;
        },

        //询问框样式修改
        confirmStyle:function(data){
            return '<span class="confirm-title">提示</span><p>'+data+'</p>'
        },

        //list页面初始化展开按钮tips展示 name：展开按钮类名
        tipsAuto:function (name,text,time) {
            layer.tips(text?text:'点击展开可以 查看更多查询 条件哦！', name, {
                tips: [1, 'rgba(0,0,0,1)'], //还可配置颜色
                time: time?time:5000,
                maxWidth:120
            });
        },
        //表单页面操作按钮底部固定兼容滚动条
        bottomFixd:function () {
            if ($(".layui-table-view-body").height()+58 > (window.innerHeight || document.documentElement.clientHeight)) {
                $(".btnformItem").css("padding-right","32px")
                //执行相关脚本。
            }else {
                $(".btnformItem").css("padding-right","16px")
            }
        },
        bpmImageShow:function (procInstId,runId,setter,he) {
            var height=publicMethods.layHeight(he);
            $(".flowChart").click(function () {
                layer.open({
                    type: 2,
                    title: "流程图",
                    skin:'btn-class',
                    shade: 0.3,
                    area: ['92%', height],
                    content:serverPath.qbdmsPath+"/extend/processRun/view/bpmImg?procInstId="+procInstId+"&runId="+runId,
                    btn:['','关闭'],
                    btnAlign: 'c',
                    success:function (layero,index) {
                        $(layero).find("a.layui-layer-btn0").hide();
                    }
                });
            });
        },
        // 表单验证正则
        formVerify:{
            names: function(value, item){ //value：表单的值、item：表单的DOM对象   名称
                if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5]+$").test(value)){
                    return '名称不能有特殊字符';
                }
                if( !(/^\S{2,32}$/.test(value))){
                    return '名称为2到32位';
                }
                if(/(^\_)|(\__)|(\_+$)/.test(value)){
                    return '名称首尾不能出现下划线\'_\'';
                }
                if(!value||!isNaN(value)){
                    return '名称不能全为数字';
                }
            },// 正整数
            positiveInteger: function(value){
                if(!/^[1-9]+\d*$/.test(value)){
                    return '请输入正整数';
                }
            }, // 2位小数正整数
            decimalPlaces: function(value){
                if(!/^(([1-9]{1}\d*)|(0{1}))((\.[0-9]{1,2}){0,1})$/.test(value)){
                    return '输入数字，最多包含2位小数';
                }
            },
            alias: function(value, item){//别名
                if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5]+$").test(value)){
                    return '别名不能有特殊字符';
                }
                if( !(/^\S{2,32}$/.test(value))){
                    return '别名为2到32位';
                }
                if(/(^\_)|(\__)|(\_+$)/.test(value)){
                    return '别名首尾不能出现下划线\'_\'';
                }
                if(/^\d+\d+\d$/.test(value)){
                    return '别名不能全为数字';
                }
            },
            category: function(value, item){//分类
                if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5]+$").test(value)){
                    return '角色分类不能有特殊字符';
                }
                if( !(/^\S{2,32}$/.test(value))){
                    return '角色分类为2到32位';
                }
                if(/(^\_)|(\__)|(\_+$)/.test(value)){
                    return '角色分类首尾不能出现下划线\'_\'';
                }
                if(/^\d+\d+\d$/.test(value)){
                    return '角色分类不能全为数字';
                }
            },
            defaultUrl:function (value, item) {//url路径地址
                if( /^[\u4e00-\u9fa5]$/.test(value)){
                    return '地址不能为中文';
                }
            },
            sort:function (value, item) {//排序
                if( !(/^[0-9]*$/.test(value))){
                    return '排序只能为数字';
                }
            },
            staffing:function (value, item) {//排序
                if( !(/^[0-9]*$/.test(value))){
                    return '编制人数只能为数字';
                }
            },
            orgCode:function(value, item){//组织代码
                if( !(/^[0-9a-zA-Z]+$/.test(value))){
                    return '组织代码只能是数字和英文';
                }
            },
            idCard:function (value, item) {
                if(!(/^\d{17}[\d|X]$/.test(value))&&value.length>0){
                    return '身份证输入不合法';
                }
            },
            email:function(value, item){
                if(!(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value))&&value.length>0){
                    return  '邮箱格式不正确'
                }
            },
            mobile:function (value,item) {
                if(!(/^1\d{10}$/.test(value))&&value.length>0){
                    return '请输入正确的手机号';
                }
            },
            phone:function (value,item) {
                if(!(/^0\d{2,3}-?\d{7,8}$/.test(value))&&value.length>0){
                    return '请输入正确的电话号码';
                }
            },
            repass: function(value){
                if(value !== $('#LAY_password').val()){
                    return '两次密码输入不一致';
                }
            },
            nickname: function(value, item){ //value：表单的值、item：表单的DOM对象
                if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){
                    return '用户名不能有特殊字符';
                }
                if(/(^\_)|(\__)|(\_+$)/.test(value)){
                    return '用户名首尾不能出现下划线\'_\'';
                }
                if(/^\d+\d+\d$/.test(value)){
                    return '用户名不能全为数字';
                }
            },
            title: function(value){
                if(value.length < 5){
                    return '标题至少得5个字符啊';
                }
            }
            ,pass: [
                /^[\S]{6,18}$/
                ,'密码必须6到18位，且不能出现空格'
            ]
            //ipv4
            ,IPv4:[
                /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
                ,'请输入正确IP地址'
            ]
            // 5至11位
            ,QQnumber:[
                /^[1-9][0-9]{4,10}$/
                ,'请输入正确QQ号码'
            ]
            //微信号，6至20位，以字母开头，字母，数字，减号，下划线
            ,WXnumber:[
                /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
                ,'请输入正确微信号码'
            ]
            // 车牌号码
            ,carNumber:[
                /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
                ,'请输入正确车票号码'
            ],
            fileRequired: function (value,item) {
                value = $(item).siblings(".uploadInput").val()
                if(!new RegExp(/[\S]+/).test(value)){
                    var tx = ""
                    if ($(item).hasClass("fileUpload")){
                        if ($(item).parent().parent().hasClass("qbdms-temTable-td")){
                            tx = $(item).parent().parent().parent().siblings("tr.qbdms-temTable-thead").children("td").eq($(item).parent().parent().index()).text();
                        }else {
                            if($(item).parent().hasClass("layui-input-block")){
                                tx =  $(item).parent().siblings("label").text();
                            }else {
                                tx =  $(item).parent().parent().parent().siblings("label").text();
                            }

                        }
                    }else {
                        if ($(item).parent().hasClass("qbdms-temTable-td")){
                            tx = $(item).parent().parent().siblings("tr.qbdms-temTable-thead").children("td").eq($(item).parent().index()).text();
                        }else {
                            tx =  $(item).parent().siblings("label").text();
                        }
                    }
                    return tx +"没有上传对应附件"
                }
            }
        }
    };

    //对外暴露的接口
    exports('publicMethods', publicMethods);
});